console.log('electron is running!!!')

/**
 * app 控制应用的事件生命周期
 * BrowserWindow 创建和管理应用窗口
 * ipcMain 进程间通信模块
 */
const { app, BrowserWindow,ipcMain } = require('electron')
const path = require('node:path')

const createWindow = () => {
    const win = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            nodeIntegration: true,
            // 将预加载脚本附加到渲染器进程 将其路径传递给 BrowserWindow 构造函数中的 webPreferences.preload 选项
            preload: path.join(__dirname, 'preload.js'),
        },

    })

    win.loadFile('index.html')
    // win.loadURL('http://localhost:2888')
}

// 当 Electron 完成初始化并准备创建浏览器窗口时调用此方法
app.whenReady().then(() => {
    // 使用ipcMain.handle监听预加载脚本的ping事件  在加载 HTML 文件之前执行此操作，以便保证处理程序在从渲染器发出 invoke 调用之前准备就绪。
    ipcMain.handle('ping', () => 'pong')

    createWindow()

    //  macOS 应用通常即使没有打开任何窗口也会继续运行，所以在没有任何可用窗口时，激活应用应该会打开一个新的窗口
    app.on('activate', () => {
        if (BrowserWindow.getAllWindows().length === 0) {
            createWindow()
        }
    })
})

// 监听所有窗口关闭时事件，在 Windows 和 Linux 上，关闭所有窗口通常会完全退出应用所以在window-all-closed 事件回调中调用app.quit()来退出应用
app.on('window-all-closed', () => {
    console.log('click exit!', process.platform)
    if (process.platform !== 'darwin') {
        app.quit()
    }
})